package com.atguigu.bigdata.spark.zzgcore.rdd.builder

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Classname Spark01_RDD_Memory
 * @Description 数据分区如何分配
 * @Date 2023/9/19 16:28
 * @Author zhuzhenguo
 */
object Spark01_RDD_File_Par1 {
  def main(args: Array[String]): Unit = {

    // 准备环境,这个 *表示系统当前最大可用核数
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(sparkConf)
    // 数据分区的分配
    // 1、数据是以行为单位进行读取
    //   spark读取文件，采用的是Hadoop的方式进行读取，所以一行一行读取，和字节数没有关系
    // 2、数据读取时以偏移量为单位，偏移量不会被重复读取
    /*
    *  1@@ => 012
    *  2@@ => 345
    *  3   => 6
    * */
    // 3、数据分区的偏移量范围的计算
    // 0 => [0,3] => 12
    // 1 => [3,6] => 3
    // 2 => [6,7]

    // [1，2], [3], []
    val rdd: RDD[String] = sc.textFile("datas/1.txt", 3)

    rdd.saveAsTextFile("output")

    // 关闭环境
    sc.stop()
  }
}
